#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <string.h>
#include <linux/limits.h>

int main(void)
{
	pid_t pid;
	char *line = NULL;
	char *option_start = NULL;

	size_t size;
	int cnt;

	char cwd[PATH_MAX];

	while (1) {
		getcwd(cwd, sizeof (cwd));
		printf("[%s] $ ", cwd);
		cnt = getline(&line, &size, stdin);
		
		// 覆盖掉末尾换行符
		if (cnt > 0) {
			line[cnt - 1] = '\0';
		}

		// 输入exit退出
		if (strcmp(line, "exit") == 0) {
			break;
		}

		option_start = line;
		// 分割字符串，分割完之后line中第一个空格变为'\0'
		// 使用字符串line即可获得命令名
		strsep(&option_start, " ");

		pid = fork();

		if (-1 == pid) {
			perror("Error forking process");
			exit(1);
		}

		if (0 == pid) {
			if (option_start == NULL) {
				printf("Exec: %s\n", line);
				// 前两个参数都是命令名
				execlp(line, line, NULL);
			} else {
				printf("Exec: %s %s\n", line, option_start);
				// 前两个参数都是命令名
				execlp(line, line, option_start, NULL);
			}
			// 能执行到这说明没exec成功
			perror("Error executing process");
			exit(2);
		}

		wait(NULL);
	}

	return 0;
}
